#!/bin/bash

# MySQL MCP Server 配置验证脚本

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 项目信息
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PYTHON_PATH="$PROJECT_ROOT/venv/bin/python3"
SERVER_SCRIPT="$PROJECT_ROOT/src/mysql_mcp_server/main.py"

echo -e "${BLUE}🔍 MySQL MCP Server 配置验证${NC}"
echo "=================================================="

# 检查基础环境
check_basic_env() {
    echo -e "${YELLOW}📋 检查基础环境...${NC}"
    
    # 检查Python
    if [ ! -f "$PYTHON_PATH" ]; then
        echo -e "${RED}❌ Python虚拟环境不存在: $PYTHON_PATH${NC}"
        return 1
    fi
    echo -e "${GREEN}✅ Python虚拟环境存在${NC}"
    
    # 检查服务器脚本
    if [ ! -f "$SERVER_SCRIPT" ]; then
        echo -e "${RED}❌ MCP服务器脚本不存在: $SERVER_SCRIPT${NC}"
        return 1
    fi
    echo -e "${GREEN}✅ MCP服务器脚本存在${NC}"
    
    # 检查工作目录
    if [ ! -d "$PROJECT_ROOT/src" ]; then
        echo -e "${RED}❌ 源代码目录不存在: $PROJECT_ROOT/src${NC}"
        return 1
    fi
    echo -e "${GREEN}✅ 源代码目录存在${NC}"
}

# 测试Python模块导入
test_python_import() {
    echo -e "${YELLOW}🐍 测试Python模块导入...${NC}"
    
    cd "$PROJECT_ROOT"
    
    # 测试基础导入
    if ! "$PYTHON_PATH" -c "import sys; print('Python版本:', sys.version)" 2>/dev/null; then
        echo -e "${RED}❌ Python基础测试失败${NC}"
        return 1
    fi
    
    # 测试模块路径
    if ! "$PYTHON_PATH" -c "import sys; sys.path.insert(0, 'src'); print('模块路径设置成功')" 2>/dev/null; then
        echo -e "${RED}❌ 模块路径设置失败${NC}"
        return 1
    fi
    
    # 测试MCP模块导入
    if ! "$PYTHON_PATH" -c "import sys; sys.path.insert(0, 'src'); import src.mysql_mcp_server.main; print('✅ MCP模块导入成功')" 2>/dev/null; then
        echo -e "${RED}❌ MCP模块导入失败${NC}"
        return 1
    fi
    
    echo -e "${GREEN}✅ Python模块导入测试通过${NC}"
}

# 测试MCP服务器启动
test_mcp_server() {
    echo -e "${YELLOW}🚀 测试MCP服务器启动...${NC}"
    
    cd "$PROJECT_ROOT"
    
    # 设置环境变量
    export PYTHONPATH="$PROJECT_ROOT/src"
    
    # 测试服务器帮助信息
    if timeout 10s "$PYTHON_PATH" "$SERVER_SCRIPT" --help >/dev/null 2>&1; then
        echo -e "${GREEN}✅ MCP服务器可以正常启动${NC}"
    else
        echo -e "${YELLOW}⚠️  MCP服务器启动测试超时或失败${NC}"
        echo -e "${BLUE}这可能是正常的，因为MCP服务器需要通过stdio通信${NC}"
    fi
    
    # 测试快速启动和退出
    echo -e "${BLUE}测试服务器快速启动...${NC}"
    timeout 3s "$PYTHON_PATH" "$SERVER_SCRIPT" < /dev/null >/dev/null 2>&1 || true
    echo -e "${GREEN}✅ 服务器启动测试完成${NC}"
}

# 检查IDE配置文件
check_ide_config() {
    echo -e "${YELLOW}🔧 检查IDE配置文件...${NC}"
    
    found_config=false
    
    # 检查Trae配置
    for dir in "$HOME/.trae" "$HOME/.trae-cn" "$HOME/.trae-aicc"; do
        if [ -f "$dir/mcp_servers.json" ]; then
            echo -e "${GREEN}✅ 找到Trae配置: $dir/mcp_servers.json${NC}"
            found_config=true
            
            # 验证配置内容
            if grep -q "mysql-mcp-server" "$dir/mcp_servers.json" 2>/dev/null; then
                echo -e "${GREEN}  ✓ 配置包含mysql-mcp-server${NC}"
            else
                echo -e "${YELLOW}  ⚠️  配置可能不完整${NC}"
            fi
        fi
    done
    
    # 检查Cursor配置
    if [ -f "$HOME/.cursor/mcp_servers.json" ]; then
        echo -e "${GREEN}✅ 找到Cursor配置: $HOME/.cursor/mcp_servers.json${NC}"
        found_config=true
    fi
    
    # 检查VS Code配置
    if [ -f "$HOME/.vscode/mcp_servers.json" ]; then
        echo -e "${GREEN}✅ 找到VS Code配置: $HOME/.vscode/mcp_servers.json${NC}"
        found_config=true
    fi
    
    # 检查通用配置
    if [ -f "$PROJECT_ROOT/mcp_config.json" ]; then
        echo -e "${GREEN}✅ 找到通用配置: $PROJECT_ROOT/mcp_config.json${NC}"
        found_config=true
    fi
    
    if [ "$found_config" = false ]; then
        echo -e "${RED}❌ 未找到任何MCP配置文件${NC}"
        return 1
    fi
}

# 显示配置信息
show_config_info() {
    echo -e "${BLUE}📋 当前配置信息：${NC}"
    echo "  项目根目录: $PROJECT_ROOT"
    echo "  Python路径: $PYTHON_PATH"
    echo "  服务器脚本: $SERVER_SCRIPT"
    echo "  PYTHONPATH: $PROJECT_ROOT/src"
    echo ""
}

# 提供故障排除建议
troubleshooting_tips() {
    echo -e "${YELLOW}🛠️  故障排除建议：${NC}"
    echo ""
    echo -e "${BLUE}如果MCP服务器无法连接：${NC}"
    echo "1. 确保IDE已重启"
    echo "2. 检查IDE的MCP设置是否启用"
    echo "3. 查看IDE的错误日志"
    echo "4. 确认配置文件路径正确"
    echo ""
    echo -e "${BLUE}如果Python模块导入失败：${NC}"
    echo "1. 重新安装依赖: pip install -r requirements.txt"
    echo "2. 检查虚拟环境是否激活"
    echo "3. 确认src目录结构完整"
    echo ""
    echo -e "${BLUE}手动测试命令：${NC}"
    echo "  cd $PROJECT_ROOT"
    echo "  export PYTHONPATH=$PROJECT_ROOT/src"
    echo "  $PYTHON_PATH $SERVER_SCRIPT"
}

# 主函数
main() {
    echo -e "${BLUE}开始验证过程...${NC}"
    echo ""
    
    # 显示配置信息
    show_config_info
    
    # 执行检查
    if ! check_basic_env; then
        echo -e "${RED}❌ 基础环境检查失败${NC}"
        troubleshooting_tips
        exit 1
    fi
    
    if ! test_python_import; then
        echo -e "${RED}❌ Python模块测试失败${NC}"
        troubleshooting_tips
        exit 1
    fi
    
    test_mcp_server
    
    if ! check_ide_config; then
        echo -e "${RED}❌ IDE配置检查失败${NC}"
        echo -e "${YELLOW}请运行安装脚本: ./install_mcp.sh${NC}"
        exit 1
    fi
    
    echo ""
    echo -e "${GREEN}🎉 验证完成！${NC}"
    echo "=================================================="
    echo -e "${GREEN}✅ 所有检查都通过了${NC}"
    echo ""
    echo -e "${BLUE}下一步：${NC}"
    echo "1. 重启您的IDE"
    echo "2. 在IDE中查找MCP连接状态"
    echo "3. 尝试使用mysql-mcp-server功能"
    echo ""
    echo -e "${YELLOW}如果仍有问题，请查看上面的故障排除建议${NC}"
}

# 运行主函数
main "$@"